/*
    智能指针，shared_ptr(共享指针)
*/

#include <iostream>
#include <memory>
#include <string>

using namespace std;

int main(int argc, char const *argv[])
{
    // p1->int(9)
    auto p1 = make_shared<int>(9);  //p1->int(9)
    cout << *p1 << endl;
    cout << "引用计数器" << p1.use_count() << endl; //只有一个指针指向那个空间

    shared_ptr<int> p2 = p1;    // p2->int(9)
    shared_ptr<int> p3 = p1;
    shared_ptr<int> p4 = p1;
    shared_ptr<int> p5 = p1;
    cout << "引用计数器" << p1.use_count() << endl; //计数器

    *p4 = 42;
    cout << *p1 << endl;

    // 因为引用计数不为0，不会执行析构函数，只是将p3与堆空间的关系解除
    p3.reset();
    cout << "引用计数器" << p1.use_count() << endl; //计数器
    cout << "引用计数器" << p2.use_count() << endl; //计数器
    cout << "引用计数器" << p3.use_count() << endl; //计数器
    cout << "引用计数器" << p4.use_count() << endl; //计数器

    return 0;
}
